
        <html>
			<head>
			     <title>Bypass WAF Cookbook - MayIKissYou</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/7883">http://drops.wooyun.org/tips/7883</a></h1>
				
      <p>
        <p><strong>PS</strong>.之前一直想把零零碎碎的知识整理下来，作为知识沉淀下来，正好借着wooyun峰会的机会将之前的流程又梳理了一遍，于是就有了下文。也希望整理的内容能给甲方工作者或则白帽子带来一些收获。</p>

<h1>0x00 概述</h1>

<hr />

<p>随着网络安全越来越受到重视，发展越来越快。随之也出现了越来越多的安全防护的软件。例如有：</p>

<blockquote>
  <p>1.云waf；[阿里云盾，百度云加速，360网站卫士，加速乐等]</p>
  
  <p>2.传统安全厂商的硬件waf以及一直存在的ips，ids设备；[绿盟，启明，深信服，安恒等]</p>
  
  <p>3.主机防护软件如安全狗，云锁；</p>
  
  <p>4.软waf如modsecurity，nginx-lua-waf等。</p>
</blockquote>

<p>当然也有目前很火的sqlchop。</p>

<p>这些进行web攻击的防护的软件，我们先统称他们为WAF，它们也是下文的主角了。</p>

<!--more-->

<h1>0x01 WAF 在哪里</h1>

<hr />

<p>这里我就用’WAF’来代替上面所说的一些防护软件，我们需要知道这些WAF都在网络空间的哪些位置。</p>

<p><strong>用户从浏览器发出一个请求（<a href="http://www.miku.com/1.php?id=1%20and1=1">http://www.miku.com/1.php?id=1%20and1=1</a>）到最终请求转发到服务器上，中间经历了多少设备，这些工作在网络的第几层（TCP/IP协议）？我们应用层的数据被哪些设备处理了？</strong></p>

<p><strong>这是一个经典的数通问题，了解WAF在网络空间的位置，我们便可以更清楚的知道使用哪些知识来协助我们进行WAF bypass。</strong></p>

<p>如下图所示：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292360563.png" alt="enter image description here" /></p>

<p>画了一个简单的拓扑图。</p>

<p>图中可以很清楚的看到，我们的云waf，硬件ips/ids防护，硬件waf，主机防护，软waf以及应用程序所在的位置。</p>

<h1>0x02 WAF 数据处理</h1>

<hr />

<p>在明白了各种防护软件在网络环境下的拓扑之后，现在了解一下基础数据的流量与相关设备的基本处理。</p>

<p>假设客户端访问url：<a href="http://www.miku.com/1.php?id=1’and’1’=’1">http://www.miku.com/1.php?id=1’and’1’=’1</a>，该请求请求的数据是服务器上数据库中id为1的记录。</p>

<p>假设这台服务器使用了相关云waf。</p>

<p>1）一个完整的过程，首先会请求DNS，由于配置云waf的时候，会修改DNS的解析。我们发送DNS请求之后，域名会被解析到云WAF的ip上去。DNS解析完成之后，获取到域名信息，然后进入下一个步骤。</p>

<p>2）HTTP协议是应用层协议，且是tcp协议，因此会首先去做TCP的三次握手，此处不去抠三次握手的细节，假设三次握手建立完毕。</p>

<p>3）发送HTTP请求过去，请求会依次经过云WAF，硬件IPS/IDS设备，硬件WAF设备，服务器，web服务器，主机防护软件/软WAF，WEB程序，数据库。 云WAF，硬件IPS/IDS，硬件WAF均有自己处理数据的方式。云WAF与硬件WAF细节上不太清楚，对于硬件IPS有一定的了解。之前在drops上发过一篇文章，文章链接是：<a href="http://drops.wooyun.org/papers/4323">http://drops.wooyun.org/papers/4323</a>。</p>

<p>在获取HTTP数据之前会做TCP重组，重组主要目的是针对互联网数据包在网络上传输的时候会出现乱序的情况，数据包被重组之后就会做协议解析，取出相关的值。如<code>http_method=GET</code>,<code>http_payload=xxx</code>等等。这些值就对应了IPS规则中相关规则的值。从而来判断规则匹配与不匹配。</p>

<h1>0x03 WAF BYPASS的理解</h1>

<hr />

<p><strong>在我自己看来，所谓的BYPASS WAF实际上是去寻找位于WAF设备之后处理应用层数据包的硬件/软件的特性。利用特性构造WAF不能命中，但是在应用程序能够执行成功的载荷，绕过防护。</strong></p>

<p><strong>那些特性就像是一个个特定的场景一样，一些是已经被研究人员发现的，一些是还没被发现，等待被研究人员发现的。当我们的程序满足了这一个个的场景，倘若WAF没有考虑到这些场景，我们就可以利用这些特性bypass掉WAF了。</strong></p>

<p>例如我们现在需要bypass一个云WAF/IPS/硬件WAF，此处我们可以利用的点就是：</p>

<blockquote>
  <p>1.Web服务器层bypass</p>
  
  <p>2.Web应用程序层bypass</p>
  
  <p>3.数据库层 bypass</p>
  
  <p>4.WAF层bypass</p>
</blockquote>

<p>由于各个层面可以利用的特性很多，而且WAF往往要考虑自身的性能等等方面，导致了WAF往往会留下一些软肋。下面的文章来细细的总结下之前那些经常被用来做bypass的特性。</p>

<p>Ps.思路是不是稍微清晰了一点。= =</p>

<h1>0x04 Bypass WAF 姿势</h1>

<hr />

<h3>1 Web Server层 bypass</h3>

<p>利用WEB服务器的特性来进行WAF bypass，常见的组合就有<code>asp+IIS aspx+IIS php+apache java+tomcat</code>等。</p>

<p>这部分内容大多是用来做http的解析等相关事务的，因此这里我理解的也就是寻找WAF对于http解析以及真实环境对于http解析的差异特性，利用差异特性来bypass WAF。</p>

<p><strong>Ps.这部分待挖掘的地方还有很多，而且这部分挖掘出来的特性应该对于WAF的bypass是致命的。</strong></p>

<h4>1.1 IIS服务器</h4>

<p>运行在IIS上的程序一般为asp,aspx的。在IIS上我们可以利用的特性：</p>

<h5>1 %特性</h5>

<p>在asp+iis的环境中存在一个特性，就是特殊符号%，在该环境下当们我输入<code>s%elect</code>的时候，在WAF层可能解析出来的结果就是<code>s%elect</code>，但是在<code>iis+asp</code>的环境的时候，解析出来的结果为<code>select</code>。</p>

<p>本地搭建<code>asp+iis</code>环境测试，测试效果如下图：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292390683.png" alt="enter image description here" /></p>

<p>Ps.此处猜测可能是iis下<code>asp.dll</code>解析时候的问题，<code>aspx+iis</code>的环境就没有这个特性。</p>

<h5>2 %u特性</h5>

<p>Iis服务器支持对于unicode的解析，例如我们对于select中的字符进行unicode编码，可以得到如下的<code>s%u006c%u0006ect</code>，这种字符在IIS接收到之后会被转换为select，但是对于WAF层，可能接收到的内容还是<code>s%u006c%u0006ect</code>，这样就会形成bypass的可能。</p>

<p>我们搭建<code>asp+iis</code>和<code>aspx+iis</code>的环境：</p>

<h6>（1）asp+iis的环境</h6>

<p>测试效果如图：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292367241.png" alt="enter image description here" /></p>

<h6>（2）aspx+iis的环境</h6>

<p>测试效果如图：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292365457.png" alt="enter image description here" /></p>

<h5>3 另类%u特性</h5>

<p>Ps.需要注意的是，这个特性测试的时候发现<code>aspx+iis</code>的环境是不支持的，有待做实验考证，怀疑是后缀后面的内容是通过<code>asp.net isapi</code>来出来的，导致了asp和aspx的不同。</p>

<p>上面写到了iis支持unicode的格式的解析。这种iis解析，存在一个特性，之前在wooyun上报过一个漏洞： <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2015-0115175">WooYun: 一个有意思的通用windows防火墙bypass(云锁为例)</a> 。</p>

<p>该漏洞主要利用的是<code>unicode</code>在iis解析之后会被转换成<code>multibyte</code>，但是转换的过程中可能出现： 多个<code>widechar</code>会有可能转换为同一个字符。</p>

<p>打个比方就是譬如select中的e对应的unicode为<code>%u0065</code>，但是<code>%u00f0</code>同样会被转换成为e。</p>

<pre><code>s%u0065lect-&gt;select
s%u00f0lect-&gt;select
</code></pre>

<p>WAF层可能能识别<code>s%u0065lect</code>的形式，但是很有可能识别不了<code>s%u00f0lect</code>的形式。这样就可以利用起来做WAF的绕过。</p>

<p>搭建<code>asp+iis</code>的环境：</p>

<p><code>asp+iis</code>的环境</p>

<p>测试效果如图：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292363822.png" alt="enter image description here" /></p>

<p>Ps.该漏洞的利用场景可能有局限性，但是挖掘思路是可以借鉴的。</p>

<h4>1.2 apache服务器</h4>

<h5>1 畸形method</h5>

<p>某些apache版本在做GET请求的时候，无论method为何值均会取出GET的内容，如请求为的method为DOTA2，依然返回了aid为2的结果。</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292384860.png" alt="enter image description here" /></p>

<p>如果某些WAF在处理数据的时候严格按照GET,POST等方式来获取数据，就会因为apache的宽松的请求方式导致bypass。 实例：  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2013-024599">WooYun: 安全宝SQL注入规则绕过</a> </p>

<p>ps.测试的时候使用了apache2.4.7的版本。</p>

<h5>2 php+apache畸形的boundary</h5>

<p>Php在解析<code>multipart data</code>的时候有自己的特性，对于<code>boundary</code>的识别，只取了逗号前面的内容，例如我们设置的boundary为<code>----aaaa</code>,<code>123456</code>，<code>php</code>解析的时候只识别了<code>----aaaa</code>,后面的内容均没有识别。然而其他的如WAF在做解析的时候，有可能获取的是整个字符串，此时可能就会出现BYPASS。</p>

<p>参考：<a href="http://blog.phdays.com/2014/07/review-of-waf-bypass-tasks.html">http://blog.phdays.com/2014/07/review-of-waf-bypass-tasks.html</a></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292363966.png" alt="enter image description here" /></p>

<p>如上图，可能出现waf获取的是一个图片的内容，而在web端获取的是<code>aid=2</code>的值。这样的差别就有可能造成bypass。</p>

<h3>2 Web应用程序层bypass</h3>

<h4>2.1 双重url编码</h4>

<p>双重url编码，即对于浏览器发送的数据进行了两次<code>urlencode</code>操作，如s做一次url编码是%73,再进行一次编码是<code>%25%37%33</code>。一般情况下数据经过WAF设备的时候只会做一次url解码，这样解码之后的数据一般不会匹配到规则，达到了bypass的效果。</p>

<p>个人理解双重url编码，要求数据在最后被程序执行之前，进行了两次url解码，如果只进行了一次解码，这样在最后的结果也是不会被正确执行的。 实例： <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2015-090369">WooYun: 腾讯某分站SQL注射-直接绕过WAF</a> </p>

<h4>2.2 请求获取方式</h4>

<h5>2.2.1 变换请求方式</h5>

<p><strong>1）GET,POST,COOKIE</strong></p>

<p>在web环境下有时候会出现统一参数获取的情况，主要目的就是对于获取的参数进行统一过滤。例如我获取的参数<code>t=select 1 from 2</code> 这个参数可以从get参数中获取，可以从post参数获取，也可以从cookie参数中获取。</p>

<p>典型的dedecms，在之前测试的时候就发现了有些waf厂商进行过滤的时候过滤了get和post，但是cookie没有过滤，直接更改cookie参数提交payload，即绕过。</p>

<p>实例: <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-089338">WooYun: 百度云加速防御规则绕过之三</a>  一个dedecms的站，<code>get，post</code>均过滤了，但是并没有过滤cookie参数。</p>

<p><strong>2）urlencode和form-data</strong> POST在提交数据的时候有两种方式，第一种方式是使用<code>urlencode</code>的方式提交，第二种方式是使用<code>form-data</code>的方式提交。当我们在测试站点的时候，如果发现POST提交的数据被过滤掉了，此时可以考虑使用<code>form-data</code>的方式去提交。</p>

<p>我们在阿里云ecs主机上搭建个环境，创建一个存在sql注入漏洞的页面，获取参数从POST上获取，首先我以<code>urlencode</code>的方式提交，查看发现提交的请求被阻断了。</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292427046.png" alt="enter image description here" /></p>

<p>其次我们以<code>form-data</code>的方式提交，发现爆出了数据库的版本。</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292484515.png" alt="enter image description here" /></p>

<h5>2.2.2 畸形请求方式</h5>

<p><strong>1）<code>asp/asp.net request</code>解析</strong></p>

<p>在asp和<code>asp.net</code>中使用参数获取用户的提交的参数一般使用request包，譬如使用<code>request['']</code>来获取的时候可能就会出现问题。 资料文档：<a href="http://www.80sec.com/%E6%B5%85%E8%B0%88%E7%BB%95%E8%BF%87WAF%E7%9A%84%E6%95%B0%E7%A7%8D%E6%96%B9%E6%B3%95.html">http://www.80sec.com/%E6%B5%85%E8%B0%88%E7%BB%95%E8%BF%87WAF%E7%9A%84%E6%95%B0%E7%A7%8D%E6%96%B9%E6%B3%95.html</a></p>

<p>当使用<code>request['']</code>的形式获取包的时候，会出现GET，POST分不清的情况，譬如可以构造一个请求包，METHOD为GET，但是包中还带有POST的内容和POST的<code>content-type</code>。</p>

<p>我们搭建一个实例：</p>

<p>我们创建一个<code>letmetest.aspx</code>的界面获取用户提交的内容，并且将<code>request['t']</code>的内容打印出来。【在服务器上安装了安全狗】 首先我们提交正常的POST请求，发现已经被安全狗阻断了：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292435996.png" alt="enter image description here" /></p>

<p>此时我们提交畸形的请求，method为GET，但是内容为POST的内容，发现打印出来了内容。</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292529386.png" alt="enter image description here" /></p>

<h4>2.3 hpp方式</h4>

<p>HPP是指HTTP参数污染。形如以下形式：</p>

<p><code>?id=1&amp;id=2&amp;id=3</code>的形式，此种形式在获取id值的时候不同的web技术获取的值是不一样的。</p>

<p>假设提交的参数即为：</p>

<pre><code>id=1&amp;id=2&amp;id=3 
</code></pre>

<p></br></p>

<pre><code>Asp.net + iis：id=1,2,3 
Asp + iis：id=1,2,3 
Php + apache：id=3
</code></pre>

<p>如此可以分析：当WAF获取参数的形式与WEB程序获取参数的形式不一致的时候，就可能出现WAF bypass的可能。</p>

<p>Ps.此处关键还是要分析WAF对于获取参数的方式是如何处理的。这里也要再提一下的，hpp的灵活运用，譬如有些cms基于url的白名单，因此可以利用hpp的方式在参数一的位置添加白名单目录，参数2的位置添加恶意的payload。形如<code>index.php?a=[whitelist]&amp;a=select 1 union select 2</code></p>

<p>实例参考： <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2015-099513">WooYun: 使用webscan360的cms厂商通过hpp可使其失效（附cmseasy新版sql注射）</a> </p>

<h1>3 数据库层bypass</h1>

<p>数据库层bypass常常是在bypass waf的sql注入防护规则。我们需要针对数据库使用该数据库的特性即可。如mysql，sqlserver等等。最近一直想整理下oracle的，这块也是研究不多的，后续整理后添加到文档里。</p>

<p>Ps.目前数据库被暴露出来的特性很多很多，基本上很多特性综合利用就已经够用了，因此特性知不知道是一方面，能不能灵活运用就得看测试者自己了。</p>

<h4>3.1 mysql数据库</h4>

<p>就目前来看mysql是使用最多的，也是研究人员研究最深的数据库。在我自己测试的角度上我一般会去测试下面的过滤点，因为一般绕过了<code>select from</code>就基本可以sql注入获取数据了。</p>

<h5>1)常见过滤的位置</h5>

<h6>第一：参数和union之间的位置</h6>

<p><a href="http://zone.wooyun.org/content/16772">http://zone.wooyun.org/content/16772</a>贴中有相关总结。</p>

<p><strong>(1):<code>\Nunion</code>的形式：</strong></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292511960.png" alt="enter image description here" /></p>

<p><strong>(2):浮点数的形式如<code>1.1,8.0</code></strong></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292565558.png" alt="enter image description here" /></p>

<p><strong>(3):<code>8e0</code>的形式：</strong></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292559156.png" alt="enter image description here" /></p>

<p><strong>(4): 利用<code>/*!50000*/</code>的形式</strong></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292599700.png" alt="enter image description here" /></p>

<h6>第二：union和select之前的位置</h6>

<p><strong>(1)空白字符</strong></p>

<p>Mysql中可以利用的空白字符有：<code>%09,%0a,%0b,%0c,%0d,%a0</code>；</p>

<p><strong>(2)注释</strong></p>

<p>使用空白注释</p>

<p>MYSQL中可以利用的空白字符有：</p>

<pre><code>/**/ 
/*letmetest*/
</code></pre>

<p><strong>(3)使用括号</strong></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292545804.png" alt="enter image description here" /></p>

<h6>第三：<code>union select</code>后的位置</h6>

<p><strong>(1)空白字符</strong></p>

<p>Mysql中可以利用的空白字符有：<code>%09,%0a,%0b,%0c,%0d,%a0</code>；</p>

<p><strong>(2)注释</strong></p>

<p>使用空白注释</p>

<p>MYSQL中可以利用的空白字符有：</p>

<pre><code>/**/
/*letmetest*/
</code></pre>

<p><strong>(3)其他方式：</strong>【这里需要考虑的是有时候<code>union select</code>和<code>select from</code>可能是两个规则，这里先整理<code>union select</code>的】</p>

<p>括号：<code>select(1)from</code></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292521429.png" alt="enter image description here" /></p>

<p>运算符号：</p>

<p><code>减号</code>：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292579712.png" alt="enter image description here" /></p>

<p><code>加号</code>：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292681389.png" alt="enter image description here" /></p>

<p><code>~号</code>：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292672238.png" alt="enter image description here" /></p>

<p><code>!号</code>：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292677561.png" alt="enter image description here" /></p>

<pre><code>@`形式`
</code></pre>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292678670.png" alt="enter image description here" /></p>

<p><code>*号</code>，利用<code>/*!50000*/</code>的形式</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292618577.png" alt="enter image description here" /></p>

<p><code>单引号和双引号</code>：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292616962.png" alt="enter image description here" /></p>

<p><code>{括号</code>：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292684127.png" alt="enter image description here" /></p>

<p><code>\N符号</code>：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292616701.png" alt="enter image description here" /></p>

<h6>第四：<code>select from</code>之间的位置</h6>

<p><strong>(1)空白字符</strong></p>

<p>Mysql中可以利用的空白字符有：<code>%09,%0a,%0b,%0c,%0d,%a0</code>；</p>

<p><strong>(2)注释</strong></p>

<p>使用空白注释</p>

<p>MYSQL中可以利用的空白字符有：<code>/**/ /*letmetest*/</code></p>

<p><strong>(3)其他符号</strong></p>

<pre><code>``符号
</code></pre>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292756858.png" alt="enter image description here" /></p>

<p><code>+,-,!,~,’”</code></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292740861.png" alt="enter image description here" /></p>

<p><code>*号</code></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292741135.png" alt="enter image description here" /></p>

<p><code>{号</code></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292777119.png" alt="enter image description here" /></p>

<p><code>(号</code></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292764288.png" alt="enter image description here" /></p>

<h6>第五：select from之后的位置</h6>

<p><strong>(1)空白字符</strong></p>

<p>Mysql中可以利用的空白字符有：<code>%09,%0a,%0b,%0c,%0d,%a0</code>；</p>

<p><strong>(2)注释</strong></p>

<p>使用空白注释</p>

<p>MYSQL中可以利用的空白字符有：<code>/**/ /*letmetest*/</code></p>

<p><strong>(3)其他符号</strong></p>

<pre><code>``号
</code></pre>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292791699.png" alt="enter image description here" /></p>

<p><code>*号</code></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292767803.png" alt="enter image description here" /></p>

<p><code>{号</code></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292731529.png" alt="enter image description here" /></p>

<p><code>括号</code></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292757157.png" alt="enter image description here" /></p>

<p>Ps.空白符，注释符，<code>/!50000select*/,{x version},(),</code>在很多点都可以使用，某些点有自己特殊的地方，可以使用一些其他的符号。</p>

<p>实例：<a href="http://wooyun.org/bugs/wooyun-2010-0121291">http://wooyun.org/bugs/wooyun-2010-0121291</a> 实例就是利用灵活利用上面的特性，导致了bypass。</p>

<h5>2)常见过滤函数</h5>

<h6>(1)字符串截取函数</h6>

<pre><code>Mid(version(),1,1)
Substr(version(),1,1)
Substring(version(),1,1)
Lpad(version(),1,1)
Rpad(version(),1,1)
Left(version(),1)
reverse(right(reverse(version()),1)
</code></pre>

<h6>(2)字符串连接函数</h6>

<pre><code>concat(version(),'|',user());
concat_ws('|',1,2,3)
</code></pre>

<h6>(3)字符转换</h6>

<p>Ascii(1) 此函数之前测试某云waf的时候被过滤了，然后使用<code>ascii (1)</code>即可</p>

<pre><code>Char(49)
Hex(‘a’)
Unhex(61)
</code></pre>

<h5>3)过滤了逗号</h5>

<h6>(1)limit处的逗号：</h6>

<pre><code>limit 1 offset 0
</code></pre>

<h6>(2)字符串截取处的逗号</h6>

<p>mid处的逗号：</p>

<pre><code>mid(version() from 1 for 1)
</code></pre>

<h6>(3)union处的逗号：</h6>

<p>通过join拼接。</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292831626.png" alt="enter image description here" /></p>

<h4>5.3.2 sqlserver数据库</h4>

<h5>1）常见过滤位置</h5>

<h6>(1) select from后的位置</h6>

<p>空白符号：</p>

<pre><code>01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20 
</code></pre>

<p>需要做<code>urlencode</code>，<code>sqlserver</code>中的表示空白字符比较多，靠黑名单去阻断一般不合适。</p>

<p><strong>注释符号</strong> Mssql也可以使用注释符号/**/</p>

<p><strong>其他符号：</strong> .符号</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292816390.png" alt="enter image description here" /></p>

<p>:号</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292821124.png" alt="enter image description here" /></p>

<h6>(2) select from之间的位置</h6>

<p><strong>空白符号：</strong></p>

<pre><code>01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20 
</code></pre>

<p><strong>注释符号</strong> Mssql也可以使用注释符号/**/</p>

<p><strong>：号</strong></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292848673.png" alt="enter image description here" /></p>

<h6>(3) and之后的位置</h6>

<p><strong>空白符号：</strong></p>

<pre><code>01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20 
</code></pre>

<p><strong>注释符号</strong></p>

<p>Mssql也可以使用注释符号<code>/**/</code></p>

<p><code>：号：</code></p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292890905.png" alt="enter image description here" /></p>

<p><code>%2b号</code>：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292847120.png" alt="enter image description here" /></p>

<h5>2）常见过滤函数</h5>

<h6>(1)字符串截取函数</h6>

<pre><code>Substring(@@version,1,1)
Left(@@version,1)
Right(@@version,1)
</code></pre>

<h6>(2)字符串转换函数</h6>

<pre><code>Ascii(‘a’) 这里的函数可以在括号之间添加空格的，一些waf过滤不严会导致bypass
Char(‘97’)
</code></pre>

<h6>(3) 其他方式</h6>

<p>Mssql支持多语句查询，因此可以使用；结束上面的查询语句，然后执行自己构造的语句。动态执行。</p>

<p>使用exec的方式：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292868059.png" alt="enter image description here" /></p>

<p>使用sp_executesql的方式：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292892865.png" alt="enter image description here" /></p>

<p>使用这类可以对自己的参数进行拼接，可以绕过WAF防御。</p>

<p>如使用该类特性然后加上上面提到的:的特性就可以绕过安全狗的注入防御。</p>

<h3>5.4 WAF层bypass</h3>

<h4>5.4.1 性能bypass</h4>

<p>WAF在设计的时候都会考虑到性能问题，例如如果是基于数据包的话会考虑检测数据包的包长，如果是基于数据流的话就会考虑检测一条数据流的多少个字节。一般这类算检测的性能，同时为了保证WAF的正常运行，往往还会做一个bypass设计，在性能如cpu高于80%或则内存使用率高于如80%是时候，会做检测bypass，以保证设备的正常运行。</p>

<p>WAF等设备都是工作在应用层之上的，如<code>HTTP,FTP,SMTP</code>等都是应用层的协议，这些数据要被处理都会被进行数据解析，协议分析。最终获取应用层的数据。如HTTP的方法是什么，HTTP的<code>querystring</code>是什么，以及HTTP的<code>requestbody</code>是什么。然后将这些实时获取的值与WAF设计的规则进行匹配，匹配上着命中规则做相应的处理。</p>

<h5>5.4.1.1 性能检测bypass</h5>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292912678.png" alt="enter image description here" /></p>

<p>现在问题就是检测多长呢？例如我用HTTP POST上传一个2G的文件，明显不可能2G全做检测不但耗CPU，同时也会耗内存。因此在设计WAF的时候可能就会设计一个默认值，有可能是默认多少个字节的流大小，可能是多少个数据包。</p>

<p>之前在zone发过个帖子，<a href="http://zone.wooyun.org/content/17331">http://zone.wooyun.org/content/17331</a>，是测试安全狗的，大致原理应该是一样的，设计了一个脚本，不断的向HTTP POST添加填充数据，当将填充数据添加到一定数目之后，发现POST中的sql注入恶意代码没有被检测了。最终达到了bypass的目的。</p>

<p>在测试某家云WAF的时候使用此类方法也可以达到bypass的目的。</p>

<h5>5.4.1.2 性能负载bypass</h5>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292927216.png" alt="enter image description here" /></p>

<p>一些传统硬件防护设备为了避免在高负载的时候影响用户体验，如延时等等问题，会考虑在高负载的时候bypass掉自己的防护功能，等到设备的负载低于门限值的时候又恢复正常工作。</p>

<p>一些高性能的WAF可能使用这种方法可能不能bypass，但是一些软WAF使用这种方式还是可以bypass的。</p>

<p><a href="http://wooyun.org/bugs/wooyun-2010-094367">http://wooyun.org/bugs/wooyun-2010-094367</a> 一个bypass的例子，将请求并发同时发送多次，多次访问的时候就有几次漏掉了，没有触发waf的拦截。</p>

<p>Ps.作者自己在测试的时候曾经做了如下测试制造了一个payload，同时添加了大量的无效数据，使用脚本兵法发送该请求，发现请求的时候有些通过了WAF，有些被WAF所拦截了。应该就是性能问题导致了bypass。</p>

<h4>4.2 fuzz bypass</h4>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292992566.png" alt="enter image description here" /></p>

<p>使用脚本去探测WAF设备对于字符处理是否有异常，上面已经说过WAF在接收到网络数据之后会做相应的数据包解析，一些WAF可能由于自身的解析问题，对于某些字符解析出错，造成全局的bypass。 我测试的时候常常测试的位置：</p>

<pre><code>1）：get请求处 
2）：header请求处 
3）：post urlencode内容处 
4）：post form-data内容处
</code></pre>

<p>然后模糊测试的基础内容有：</p>

<pre><code>1）编码过的0-255字符 
2）进行编码的0-255字符 
3）utf gbk字符
</code></pre>

<p>实例1：<a href="http://wooyun.org/bugs/wooyun-2010-087545">http://wooyun.org/bugs/wooyun-2010-087545</a></p>

<p>在一次测试安全狗的过程中，使用post的方式提交数据，提交数据包括两个参数，一个是正常的fuzz点，另一个参数包含一个sql注入语句。当在测试前面的fuzz点的时候，处理到\x00的字符的时候，没有提示安全狗阻拦。应该是解析这个字符的时候不当，导致了bypass。</p>

<p>实例2：<a href="http://wooyun.org/bugs/wooyun-2015-091516">http://wooyun.org/bugs/wooyun-2015-091516</a></p>

<p>在一次测试云WAF中，使用get方式提交数据，提交内容包括一个参数，参数为字符+sql注入的语句。当在fuzz字符的时候，发现云waf在处理到&amp;字符的时候，没有提示云waf阻拦。由于&amp;字符的特殊性，猜测是由于和url请求中的&amp;没有处理好导致的。由于mysql中&amp;&amp;同样可以表示and，因此拼凑一下sql语句就达到了bypass的目的。</p>

<p>Ps.上面做模糊测试的时候仅仅是测试了一些各个位置的单个字符，应该还会有更复杂的测试，WAF并没想象的那么完美，肯定还可以fuzz出其他地方的问题。</p>

<h4>5.4.3 白名单bypass</h4>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292948483.png" alt="enter image description here" /></p>

<p>WAF在设计之初一般都会考虑白名单功能。如来自管理IP的访问，来自cdn服务器的访问等等。这些请求是可信任的，不必走WAF检测流程。</p>

<p>获取白名单的ip地址如果是从网络层获取的ip，这种一般bypass不了，如果采用应用层的数据作为白名单，这样就可能造成bypass。</p>

<p>之前有一篇文章： <a href="http://h30499.www3.hp.com/t5/Fortify-Application-Security/Bypassing-web-application-firewalls-using-HTTP-headers/ba-p/6418366#.VGmhx9Yi5Mu">http://h30499.www3.hp.com/t5/Fortify-Application-Security/Bypassing-web-application-firewalls-using-HTTP-headers/ba-p/6418366#.VGmhx9Yi5Mu</a></p>

<p>文章内容是通过修改http的header来bypass waf，这里我们截取文章中部分内容：</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292938645.png" alt="enter image description here" /></p>

<p>这些header常常用来获取IP，可能还有其他的，例如nginx-lua-waf:</p>

<p><img src="http://static.wooyun.org//drops/20150811/2015081104292972279.png" alt="enter image description here" /></p>

<p>获取clientip使用了X-Real-ip的header。</p>

<p>此种方法还可以用来绕过如登陆锁ip，登陆多次验证码，后台验证等等的场景。</p>

<h1>0x05 结束语</h1>

<hr />

<p>特性就像是一个个特定的场景一样，一些是已经被研究人员发现的，一些是还没被发现，等待被研究人员发现的。</p>

<p>随着一个个特性的发现，WAF的防护能力在web对抗中逐渐增强，在我看来，当所有的特性场景均被WAF考虑到的时候，势必就会有的新的发现。（如我们现在了解的mysql的场景）</p>

<p>因此我们不用担心当所有的特性被WAF考虑到的时候我们无计可施，未知的特性那么多，我们还有很多地方可以去挖掘。</p>

<p>当你发现这些姿势都不好使的时候，你就该去发现一些新的特性了，毕竟设计WAF的选手都是基于目前的认知下去设计的，当新的特性出现的时候，势必又是一波bypass。</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          